<?php
	
	$JUSTIF_SIN_RESP = 'No hubo respuesta por parte del técnico';
	$SIN_TECNICO = 'No hay técnicos disponibles para asignar';
	
	$app->get('/tarea/listar', function () use($app){
		$idEmpresa = $_SESSION['idEmpresa'];
		$fecha = date('d/m/Y', time() - 60*60*3);
		$cantTareas = Tarea::getCantSinAsignarPorFecha($idEmpresa, $fecha);
		if($cantTareas > 0){
			$_SESSION['asignarTarea'] = true;
		}else{
			if(isset($_SESSION['asignarTarea'])){
				unset ($_SESSION['asignarTarea']);	
			}
		}
		$app->render('../web/pages/tarea/tareaListar.php');
	});
	
	$app->get('/tarea/nueva', function () use($app){
		$app->render('../web/pages/tarea/tareaNueva.php');
	});
	
	$app->get('/encuesta/realizarEncuesta', function () use($app){
		$app->render('../web/pages/cliente/ingresoEncuesta.php');
	});
	
	$app->post('/encuesta/ingresarEncuesta', function () use($app){
		$tarea = Tarea::buscarTarea($_SESSION['idTarea']);	
		$tarea->tareaExito = $_POST['tareaExito'];
		$tarea->tecnicoPredisposicion = $_POST['tecnicoPredisposicion'];
		$tarea->tecnicoEficiencia = $_POST['tecnicoEficiencia'];
		$tarea->comentarios = $_POST['comentarios'];
		$tarea->save();	
		$mensaje = 'La encuesta se ha guardado.Gracias por su opinión';
		$app->render('../web/pages/cliente/ingresoEncuesta.php', array('info' => $mensaje));
	});
	
	$app->get('/encuesta/completarEncuesta', function () use($app){
		$tarea = Tarea::buscarTareaPorNroOrden($_GET['nroOrden']);
		if($tarea!=false && $tarea->idEstadoTarea == 3){
			$_SESSION['idTarea'] = $tarea->idTarea;
			$nroOrden = $tarea->nroOrden;
			$descrip = $tarea->descripcion;
			$fechaInicio = $tarea->fechaInicio;
			$tipoTarea = TipoTarea::buscarTipoTarea($tarea->idTipoTarea)->descripcion;
			$cliente = Cliente::buscarCliente($tarea->idCliente);
			$direccionCliente = $cliente->direccion;
			$nombreCliente = $cliente->nombreApell;
			$app->render('../web/pages/cliente/encuesta.php', 
			array('nroOrden' => $nroOrden,
					'descrip' => $descrip,
					'fechaInicio' => $fechaInicio,
					'tipoTarea' => $tipoTarea,
					'direccionCliente' => $direccionCliente,
					'nombreCliente' => $nombreCliente));
			return 1;
		}else{
			if($tarea==false){
				$mensaje = 'No hay tarea en el sistema asociada a los datos ingresados';
				$app->render('../web/pages/cliente/ingresoEncuesta.php', array('error' => $mensaje));
			}else{
				$mensaje = 'El técnico debe haber finalizado la tarea para completar la encuesta';
				$app->render('../web/pages/cliente/ingresoEncuesta.php', array('info' => $mensaje));
			}
		}
		
	});
	
	$app->get('/tarea/asignarTareas', function () use($app){
		unset ($_SESSION['asignarTarea']);
		$idEmpresa = $_SESSION['idEmpresa'];
		$fecha = date('d/m/Y', time() - 60*60*3);
		$tareasRechazadas = array();
		$i = 0;
		$tareasFecha = Tarea::listarSinAsignarPorFecha($idEmpresa, $fecha);
		foreach ($tareasFecha as $tar ) {
			if(!asignarTecnico($idEmpresa, $tar->idTarea, null)){
				$tareasRechazadas[$i] =  $tar->codTarea;
				$i++;
				$tar->idEstadoTarea = 5;
				$tar->save();
			}	
		}
		if(count($tareasRechazadas) > 0){
			$mensaje = 'Por falta de disponibilidad de los técnicos, las siguientes tareas no se pudieron asignar: ';
			for ($i=0; $i < count($tareasRechazadas); $i++) { 
				$mensaje = $mensaje . $tareasRechazadas[$i] . ';';
			}
			$app->render('../web/pages/tarea/tareaListar.php', array('error' => $mensaje));
		}else{
			$app->render('../web/pages/tarea/tareaListar.php' , array('response' => 'Tareas asignadas con éxito'));	
		}	
	});
	
	$app->post('/tarea/reasignarTecnico', function () use($app,$JUSTIF_SIN_RESP,$SIN_TECNICO){
		$idEmpresa = $_SESSION['idEmpresa'];
		$idTarea = $_POST['idTarea'];
		$criterio = $_POST['criterio'];
		$tarea = Tarea::buscarTarea($idTarea);
		$diaInicio = substr($tarea->fechaInicio, 0, strpos($tarea->fechaInicio,"/"));
		$diaHoy = date('d', time() - 60*60*3);
		if($tarea->idEstadoTarea == 3){
			 $app->render('../web/pages/tarea/tareaListar.php', array('error' => 'La tarea no puede reasignarse debido a que está finalizada'));
			return 0;
		}
		if($tarea->idEstadoTarea == 6){
			 $app->render('../web/pages/tarea/tareaListar.php', array('error' => 'La tarea no puede reasignarse debido a que está iniciada'));
			return 0;
		}
		$idTecnico = $tarea->idTecnico;
		if($idTecnico != null){
			TareaRechazada::agregarTareaRechazada($idTarea, $idTecnico, $JUSTIF_SIN_RESP);	
		}
		if($criterio == "manual"){
			$respuestaAsignacion = asignarTecnicoManual($_POST['tecnicoSeleccionado'], $tarea->idTarea);	
			if($respuestaAsignacion == 0){
				$errores = 'El técnico no se pudo asignar. Causa: superaría las 8 horas de trabajo por día';
				$app->render('../web/pages/tarea/tareaListar.php', array('response' => $errores));
			}else{
				$app->render('../web/pages/tarea/tareaListar.php', array('response' => 'Tarea '.$tarea->nroOrden. ' reasignada con éxito'));
			}
		}else{
			$respuesta = asignarTecnico($idEmpresa, $idTarea, $criterio);
			if($respuesta!=1){
				$tarea->idEstadoTarea = 5;
				$tarea->idTecnico = null;
				$tarea->save();
				$app->render('../web/pages/tarea/tareaListar.php', array('error' => $SIN_TECNICO));
			}else{
				$app->render('../web/pages/tarea/tareaListar.php', array('response' => 'Tarea '.$tarea->nroOrden. ' reasignada con éxito'));	
			}	
		}
	});
	
	
	
	$app->get('/tarea/listarJson', function (){
		controlarRespuestaAsignacion();
		$response = new stdClass();	
		$page = $_GET['page']; // get the requested page 
		$limit = $_GET['rows']; // get how many rows we want to have into the grid
    	$idEmpresa = $_SESSION['idEmpresa'];
		$fecha = date('d/m/Y', time() - 60*60*3);
		$campoBusqueda = null;
		$valorBusqueda = null;
    	if(isset($_GET['searchField']) && isset($_GET['searchString'])){
    		$campoBusqueda = $_GET['searchField'];
    		$valorBusqueda = $_GET['searchString'];	
		}
		$count = Tarea::getCantRows($idEmpresa,$fecha);
    	if( $count >0 ) {
    		 $total_pages = ceil($count/$limit); 
		}else {
			 $total_pages = 1; 
		}
		if ($page > $total_pages) $page=$total_pages; 
		$start = $limit*$page - $limit; // do not put $limit*($page - 1)
		$tareas = Tarea::listarInicioFin($idEmpresa,$start, $limit,$fecha, $campoBusqueda, $valorBusqueda);
    	$i = 0;
		$response->page = $page; 
		$response->total = $total_pages; 
		$response->records = $count;
		foreach ($tareas as $tar) {
    		$response->gridModel[$i]['idTarea']=$tar->idTarea;
			$response->gridModel[$i]['nroOrden']=$tar->nroOrden;
			$response->gridModel[$i]['descripcion']=$tar->descripcion;
			$response->gridModel[$i]['fechaInicio']=$tar->fechaInicio;
			$response->gridModel[$i]['fechaCreacion']=$tar->fechaCreacion;
			$response->gridModel[$i]['fechaFin']=$tar->fechaFin;
			$cliente = $tar->cliente()->find_one();
			if($cliente!=false){
				$response->gridModel[$i]['codCliente'] = $cliente->codCliente;
			}
			$tipoTarea = $tar->tipoTarea()->find_one();
			if($tipoTarea!=false){
				$response->gridModel[$i]['tipoTarea'] = $tipoTarea->descripcion;
				$response->gridModel[$i]['idTipoTarea'] = $tipoTarea->idTipoTarea;
			}
			$tecnico = $tar->tecnico()->find_one();
			if($tecnico!=false){
				$response->gridModel[$i]['nombreTecnico'] = $tecnico->nombreApell;
			}
			$estado = $tar->estadoTarea()->find_one();
			if($estado!=false){
				$response->gridModel[$i]['estado'] = $estado->descripcion;
			}
			$i++;
		}
		echo json_encode($response);
	});
	
	$app->get('/tarea/listarFuturasProxJson', function (){
		$response = new stdClass();	
		$page = $_GET['page']; // get the requested page 
		$limit = $_GET['rows']; // get how many rows we want to have into the grid
    	$idEmpresa = $_SESSION['idEmpresa'];
		$fecha = date('d/m/Y', time() - 60*60*3);
		$campoBusqueda = null;
		$valorBusqueda = null;
		if(isset($_GET['searchField']) && isset($_GET['searchString'])){
    		$campoBusqueda = $_GET['searchField'];
    		$valorBusqueda = $_GET['searchString'];	
		}
		$count = Tarea::getCantRowsFechaDistinta($idEmpresa,$fecha);
    	if( $count >0 ) {
    		 $total_pages = ceil($count/$limit); 
		}else {
			 $total_pages = 1; 
		}
		if ($page > $total_pages) $page=$total_pages; 
		$start = $limit*$page - $limit; // do not put $limit*($page - 1)
		$tareas = Tarea::listarInicioFinFechaDistinta($idEmpresa,$start, $limit,$fecha, $campoBusqueda, $valorBusqueda);
    	$i = 0;
		$response->page = $page; 
		$response->total = $total_pages; 
		$response->records = $count;
		foreach ($tareas as $tar) {
    		$response->gridModel[$i]['idTarea']=$tar->idTarea;
			$response->gridModel[$i]['nroOrden']=$tar->nroOrden;
			$response->gridModel[$i]['descripcion']=$tar->descripcion;
			$response->gridModel[$i]['fechaInicio']=$tar->fechaInicio;
			$response->gridModel[$i]['fechaCreacion']=$tar->fechaCreacion;
			$response->gridModel[$i]['fechaFin']=$tar->fechaFin;
			$cliente = $tar->cliente()->find_one();
			if($cliente!=false){
				$response->gridModel[$i]['codCliente'] = $cliente->codCliente;
			}
			$tipoTarea = $tar->tipoTarea()->find_one();
			if($tipoTarea!=false){
				$response->gridModel[$i]['tipoTarea'] = $tipoTarea->descripcion;
				$response->gridModel[$i]['idTipoTarea'] = $tipoTarea->idTipoTarea;
			}
			$tecnico = $tar->tecnico()->find_one();
			if($tecnico!=false){
				$response->gridModel[$i]['nombreTecnico'] = $tecnico->nombreApell;
			}
			$estado = $tar->estadoTarea()->find_one();
			if($estado!=false){
				$response->gridModel[$i]['estado'] = $estado->descripcion;
			}
			$i++;
		}
		echo json_encode($response);
	});
	
	$app->post('/tarea/agregar', function () use($app){
		$tarea = Model::factory('Tarea')->create();
		$tarea->fechaInicio = $_POST['fechaInicio'];	
		$tarea->descripcion = $_POST['descripcion'];
		$tarea->idTipoTarea = $_POST['tipoTarea'];
		$fecha = date('d/m/Y H:i', time() - 60*60*3);
		$tarea->fechaCreacion  = $fecha;
		$codCliente = $_POST['codCliente'];
		$idEmpresa = $_SESSION['idEmpresa'];
		$criterioBusqueda = $_POST['criterio'];
		$cliente = Cliente::buscarClientePorCodigo($idEmpresa, $codCliente);
		$tarea->idEstadoTarea = 1;
		if($cliente != false){
			//controlar si la fecha de inicio es en el dia si no se guarda para una asignacion al dia siguiente
			$diaHoy = date('d', time() - 60*60*3);
			$diaInicio = substr($tarea->fechaInicio, 0, strpos($tarea->fechaInicio,"/"));
			if($diaHoy == $diaInicio){
				//controlar que haya tecnico disponible para asignarla
				$cantTecnicos = tecnicosDisponibles($idEmpresa, $tarea->idTipoTarea);
				if(count($cantTecnicos) > 0){
					$tarea->idCliente = $cliente->idCliente;
					$tarea->save();
					$tarea->nroOrden = $cliente->codCliente . 'TAR' . strval($tarea->idTarea);
					$tarea->save();
					if($criterioBusqueda == "manual"){
						$respuestaAsignacion = asignarTecnicoManual($_POST['tecnicoSeleccionado'], $tarea->idTarea);	
						if($respuestaAsignacion == 0){
							Tarea::borrarTarea($tarea->idTarea);
							$errores = 'El técnico no se pudo asignar. Causa: superaría las 8 horas de trabajo por día';
							$app->render('../web/pages/tarea/tareaNueva.php', array('response' => $errores));
						}else{
							$app->render('../web/pages/tarea/tareaListar.php');
						}
					}else{
						$respuestaAsignacion = asignarTecnico($idEmpresa, $tarea->idTarea,$criterioBusqueda);
						if($respuestaAsignacion == 0){
							Tarea::borrarTarea($tarea->idTarea);	
							$errores = 'No hay técnicos disponibles para realizar la tarea el día ' . $tarea->fechaInicio;
							$app->render('../web/pages/tarea/tareaNueva.php', array('response' => $errores));
						}else{
							$app->render('../web/pages/tarea/tareaListar.php');
						}	
					}
				}else{
					$errores = 'No hay técnicos disponibles para realizar la tarea el día ' . $tarea->fechaInicio;
					$app->render('../web/pages/tarea/tareaNueva.php', array('response' => $errores));
				}	
			}else{
				//controlar que no se superen las 8 horas laborales para el dia
				if(tecnicosDisponiblesProxDias($idEmpresa, $tarea->idTipoTarea, $tarea->fechaInicio)){
					$tarea->idCliente = $cliente->idCliente;
					$tarea->save();
					$tarea->nroOrden = $cliente->codCliente . 'TAR' . strval($tarea->idTarea);
					$tarea->save();	
					$tarea->criterioAsignacion = $criterioBusqueda;
					$tarea->save();
					$app->render('../web/pages/tarea/tareaListar.php');	
				}else{
					$errores = 'No hay técnicos disponibles para realizar la tarea el día ' . $tarea->fechaInicio;
					$app->render('../web/pages/tarea/tareaNueva.php', array('response' => $errores));
				}
			}
		}else{
			$errores = 'El código de cliente proporcionado no está asociado a ningún cliente';
			$app->render('../web/pages/tarea/tareaNueva.php', array('response' => $errores));
		}
	});
	
	$app->post('/tarea/eliminar', function (){
		$tarea = null;
		$idTarea = null;
		if($_POST['id'] != "_empty" ){
			$idTarea = $_POST['id'];	
		}
		if($_POST['oper'] == "del"){
			$tarea = Tarea::buscarTarea($idTarea);
			if($tarea->idEstadoTarea == 3 || $tarea->idEstadoTarea == 6){
				$response = new stdClass();
				$response->estado = "ERROR";
				if($tarea->idEstadoTarea == 3){
					$response->errores = "La tarea no puede ser borrada debido a que ya ha finalizado";	
				}
				if($tarea->idEstadoTarea == 6){
					$response->errores = "La tarea no puede ser borrada debido a que el técnico la ha iniciado";
				}
				echo json_encode($response);
				return false;	
			}else{
				Tarea::borrarTarea($idTarea);
				$response = new stdClass();
				$response->estado = "OK";
				$response->info = "Pedido anulado correctamente";
				echo json_encode($response);
				return true;	
			}
		}
	});
	
	function controlarRespuestaAsignacion(){
		$idEmpresa = $_SESSION['idEmpresa'];
		$fecha = date('d/m/Y', time() - 60*60*3);	
		$tiempoControl = date('H:i', time() - 60*60*3);
		$horaActual= (int)substr($tiempoControl, 0,2);
		$minutoActual = (int)substr($tiempoControl, 3);
		$minutosTotales = $horaActual *60 + $minutoActual;
		$tareas = Tarea::listarPendientesPorFecha($idEmpresa, $fecha);
		foreach ($tareas as $tar) {
			if($tar->criterioAsignacion != "manual" && $tar->tiempoAsignacion != null){
				$horaAsignacion= (int)substr($tar->tiempoAsignacion, 0,2);
				$minutoAsignacion = (int)substr($tar->tiempoAsignacion, 3);
				$minutosTotalesAsignacion = $horaAsignacion *60 + $minutoAsignacion;
				if($minutosTotales - $minutosTotalesAsignacion >= 15){
					TareaRechazada::agregarTareaRechazada($tar->idTarea, $tar->idTecnico, 'No hubo respuesta por parte del técnico');
					$respuesta = asignarTecnico($idEmpresa, $tar->idTarea, null);
					if($respuesta!=1){
						$tar->idEstadoTarea = 5;
						$tar->idTecnico = null;
						$tar->save();
					}			
				}
			}	
		}
	}

?>